public class 判定字符是否唯一 {
    /**
     * https://leetcode.cn/problems/is-unique-lcci/
     * 哈希表 or 位图存储
     */

    public boolean isUnique(String str) {
        int[] hash = new int[256];
        char[] astr = str.toCharArray();
        for(char ch : astr){
            if(++hash[ch] > 1){
                return false;
            }
        }
        return true;
    }

    public boolean isUnique1(String str) {
        //存储的位图
        int a = 0;
        //用来移位的
        int b = 1;
        char[] astr = str.toCharArray();
        for(char ch : astr){
            //找出字母的偏移地址
            int c = b << (ch - 'a');
            //如果元素为1说明存在, 返回0, 否则存储一下
            if((a & c) != 0){
                return false;
            }
            a |= c;
        }
        return true;
    }
}
